;
(function () {
  'use strict'

  window.b = {
    add: add,
    del: del,
    update: update,
    read: read
  }

  var todo_list, last_id;
  init_data();

  function init_data() {
    todo_list = s.get('todo_list');
    last_id = s.get('last_id');

    if (!todo_list) {
      todo_list = [];
      s.set('todo_list', todo_list);
    };

    if (!last_id) {
      last_id = 0;
      s.set('last_id', last_id);
    };
  };

  function find_index(id) {
    return todo_list.findIndex(function (list_item) {
      return list_item.id === id;
    })
  }

  function find(id) {
    return todo_list.find(function (list_item) {
      return list_item.id === id;
    })
  }

  function sync() {
    return s.set('todo_list', todo_list);
  }

  function add(item) {
    var content = item;
    last_id++;
    item.id = last_id;
    todo_list.push(content);
    s.set('last_id', last_id);
    sync()
  };

  function del(id) {
    var del_index = find_index(id);
    if (del_index === -1) return;
    todo_list.splice(del_index, 1);
    sync()
  }

  function update(id, patch) {
    var patch_index = find_index(id);
    if (patch_index === -1) return;
    var list_item = todo_list[patch_index];
    todo_list[patch_index] = Object.assign({}, list_item, patch);
    sync()
  }

  function read(id) {
    if (id) return find(id);
    return todo_list;
  }
})();